package org.jeecg.modules.online.config.model;

import com.alibaba.fastjson.JSONObject;
import lombok.Data;
import org.apache.commons.lang.StringUtil;
import org.jeecg.common.util.oConvertUtils;
import org.jeecg.modules.online.cgform.entity.OnlCgformField;
import org.jeecg.modules.online.cgform.util.OnlineDbHandler;
import org.jeecg.modules.online.cgreport.entity.OnlCgreportItem;

/**
 * online字段配置model
 * 因online报表、online表单、高级查询配置字段均不一样 以此类作为统一，接口处理只处理此类即可
 * @Author taoYan
 * @Date 2021/10/15
 **/
@Data
public class OnlineFieldConfig {

    /** 字段名 */
    private String name;

    /** 字段类型 int/long/date/string */
    private String type;

    /** 界面展示类型 list_multi popup */
    private String view;

    /** 查询模式 group(范围查询)/single(简单查询) */
    private String mode;

    /**
     * 高级查询下 条件取该值 不需要从param中找
     */
    private String val;

    /**查询规则  gt eq lt  高级查询查询规则是传递进来的 普通页面查询查询规则根据值判断不需要设置该属性*/
    private String rule;

    /**是否是查询  1是 */
    private Integer isSearch;

    private String mainField;

    private String mainTable;

    /**
     * 表名
     */
    private String table;

    public OnlineFieldConfig(){

    }

    /**
     * 高级查询构造
     * @param parameter
     */
    public OnlineFieldConfig(JSONObject parameter){
        String field = parameter.getString("field");
        String[] fieldArray = field.split(",");
        // 没有使用逗号分割，说明是主表，子表会是表名,字段名 如： test_join_submany,name
        if (fieldArray.length == 1) {
            this.name = field;
        }else if (fieldArray.length == 2) {
            this.name = fieldArray[1];
            this.table = fieldArray[0];
        }
        // 这个type 有点坑 有时是数据类型 有时是控件类型
        String type = parameter.getString("type");
        //update-begin-author:sunjianlei date:20211227 for: 【JTC-252】兼容数据库类型
        String dbType = parameter.getString("dbType");
        //update-begin-author:taoyan date:20220104  for: JTC-449【Online表单】高级查询，日期查询报错，Postgres数据库
        if (StringUtil.isNotEmpty(dbType) && OnlineDbHandler.isNumField(dbType)) {
        //update-end-author:taoyan date:20220104  for: JTC-449【Online表单】高级查询，日期查询报错，Postgres数据库
            this.type = dbType;
        } else {
            this.type = type;
        }
        //update-end-author:sunjianlei date:20211227 for: 【JTC-252】兼容数据库类型
        if("list_multi".equals(type) || "popup".equals(type)){
            // 因为特殊处理只有这两个控件 此处只判断这两个控件类型
            this.view = type;
        }
        this.rule = parameter.getString("rule");
        this.val = parameter.getString("val");
        this.mode = "single";
        this.isSearch = 1;
    }

    /**
     * online报表构造
     * @param item
     */
    public OnlineFieldConfig(OnlCgreportItem item){
        this.name = item.getFieldName();
        this.type = item.getFieldType();
        this.mode = item.getSearchMode();
        this.isSearch = item.getIsSearch();
    }

    /**
     * online表单构造
     * @param item
     */
    public OnlineFieldConfig(OnlCgformField item){
        this.name = item.getDbFieldName();
        this.type = item.getDbType();
        this.mode = item.getQueryMode();
        this.isSearch = item.getIsQuery();

        this.mainField = item.getMainField();
        this.mainTable = item.getMainTable();
        // 判断是否启用自定义的查询
        String queryConfigFlag = item.getQueryConfigFlag();
        if("1".equals(queryConfigFlag)){
            this.view = item.getQueryShowType();
        }else{
            this.view = item.getFieldShowType();
        }

    }
}
